/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package serversocket;

import java.util.ArrayList;

/**
 * Clase para listar los puertos existentes
 * 
 * @author Carlos
 */
public class ListaPuertos {
    
    private static ListaPuertos instancia;
    private ArrayList  lista;
    private ArrayList<Thread> Hilos;
    
    /**
     * Constructor de la clase
     */
    private ListaPuertos(){
                this.lista = new ArrayList();
                this.Hilos = new ArrayList<Thread>();
    }
   
    /**
     * Crea una instancia de la clase
     *     
     * @return la instancia de la clase
     */
     public static ListaPuertos getInstance(){
        if (ListaPuertos.instancia == null){
            ListaPuertos.instancia = new ListaPuertos();
        } 
        return ListaPuertos.instancia;
     }
    
     /**
      * Obtenemos el siguiente puerto de la lista
      * 
      * @return el puerto
      */
     public int obtenerSiguientePuerto(){
         for(int i = 9050; i != 9100;i++){
             if (this.lista.contains(i) == false){
                 this.lista.add(i);
                 return i;
             }
         }
         return -1;
     }
     
     /**
      * Remueve el puerto de la lista
      * @param puerto el puerto de conexión
      */
     public void liberarPuerto(int puerto){
         if (this.lista.contains(puerto) == true){
             this.lista.remove(puerto);
         }
     }
     
     /**
      * Abre el hilo de ejecución para la conexión
      * @param nombreUsuario nombre del usuario
      * @return el puerto donde se está ejecutando el hilo
      */
     public int abrirHilo(String nombreUsuario){
         int puertoHiloNuevo = obtenerSiguientePuerto();
         this.Hilos.add(new ClientConexThread(nombreUsuario,puertoHiloNuevo));
         this.Hilos.get(this.Hilos.size()-1).start();
         return puertoHiloNuevo;
     }
}
